// pages/luckDraw/index.js
let config = require("../../utils/config");
import {http} from "../../utils/request";
Page({

  /**
   * 页面的初始数据
   */
  data: {
    po: null,
    prizeArr: [],
    isTurnOver: false, //抽奖状态，是否正在抽奖...

    showRule: false,
    showArea: false,
    address: null, //收货地址

    prizeId: -1, //抽中的奖品id，  -1为谢谢参与
    isClicked: false, //防止快速点击重复请求
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      po: options.po
    })
    this.queryPrizeList();
    this.queryDefaultAddress();
  },

  /** 奖品列表 */
  queryPrizeList(){
    let that = this;
    http.requestData("GET","Lucky/GetLuckListByRoomId",{
      po: this.data.po
    }).then(res=>{
      if(res.Tag == 10){
        res.Data.forEach(item=>{
          item.isCheck = false
        })
        that.setData({
          prizeArr: res.Data
        })
      }else{
        http.showToast(res.Message);
      }
    })

  },
  /** 查询是否有收货地址 */
  queryDefaultAddress(){
    let that = this;
    http.requestData("GET","MemberAddress/GetPage",{
      pageIndex: 1,
      pageSize: 10
    }).then(res=>{
      if(res.Tag == 10){
        if(res.Data.length>0){
          res.Data.forEach(item=>{
            //设置的默认地址
            if(item.IsDefault){
              that.data.address = item;
            }
          })
          //如果没有设置默认，则去列表第一条
          if(!that.data.address){
            that.data.address = res.Data[0];
          }
          that.setData({
            address: that.data.address
          })
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /** 防止重复点击请求 */
  isClicked(){
    let that = this;
    this.setData({
      isClicked: true
    })
    setTimeout(() => {
      that.setData({
        isClicked: false
      })
    }, 1000);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    
  },

  /**立即抽奖 */
  luckDrawTap(){
    if(this.data.isTurnOver){
      return http.showToast("抽奖进行中...")
    }
    if(this.data.isClicked){
      return
    }
    this.isClicked(); //阻止快速点击重复请求
    // this.luckDrawConfirm();
    // return;
    //获取抽奖结果
    let that = this;
    http.requestData("POST","Lucky/GetLotteryByRoomId",{
      po: this.data.po,
      addressId: this.data.address.Id
    }).then(res=>{
      if(res.Tag == 10){//抽中奖品
        that.data.prizeId = res.Data.Id;
      }else{// 谢谢参与
        that.data.prizeId = -1;
      }
      that.setData({
        prizeId: that.data.prizeId,
        showArea: true
      })
    })
  },

  /** 选择地址 */
  choiceAddressTap(){
    http.href("/pages/mine/address/index");
  },

  /** 转动抽奖 */
  luckDrawConfirm(){
    this.setData({
      showArea: false,
      isTurnOver: true  //将抽奖状态改为 进行中
    })
    let prizeId = this.data.prizeId;  //奖品id 
    let prizeIndex = 0; //对应的数组下标
    for (let i = 0; i < this.data.prizeArr.length; i++) {
      const item = this.data.prizeArr[i];
      if(item.Id == prizeId || (prizeId==-1 && item.Type==20)){
        prizeIndex = i;
        break;
      }
    }
    this.rotateAnimation(prizeIndex);
  },
  /** 抽奖旋转动画 */
  rotateAnimation(prizeId){
    /**
     * 数组的长度就是旋转的最大圈数， 最后一圈会转到中奖的位置
     * 数组里的数字表示两个奖品之间跳转所需要的时间，数字越小速度越快
     */
    let rotate_arr = [100,80,50,30,30,30,90,150,250,350];
    //旋转的总次数
    let rotate_num = rotate_arr.length;
    //每一圈所需要的时间；
    let turnLong = 0;
    rotate_arr.forEach((duration,index)=>{
      //duration：两个奖品之间跳转所需要的时间
      setTimeout(() => {
        this.rotateCircle(duration, index+1, rotate_num, prizeId);
      }, turnLong);
      //由于每一圈转完所需要的时间不一样，所以要做一个叠加操作
      turnLong += duration * 8;
    })
  },

  /**
   * 开始转圈
   * @param {*} duration  每个奖品跳转所需要的时间
   * @param {*} index 表示转到第几圈
   * @param {*} rotate_num  旋转的总圈数
   * @param {*} prize_i  中奖后的奖品对应数组下标
   */
  rotateCircle(duration,index,rotate_num,prize_i){
    let that = this;
    /**
     * 每个奖品对应的数组下标
     * 0  1  2
     * 3     5
     * 6  7  8
     * 由图可知转圈执行的顺序数组
     */
    let current_arr = [0,1,2,5,8,7,6,3]
    let prize_arr = this.data.prizeArr; //奖品数组
    for (let i = 0; i < current_arr.length; i++) {
       //如果转到最后以前（倒数第二圈），把数组截取到中奖的位置
      if(index == rotate_num){
        if(prize_i == current_arr[i]){
          console.log("=========转盘第几个========",i+1)
          current_arr.splice(i+1);
        }
      }
      //更新奖品转盘选中的状态
      setTimeout(() => {
        prize_arr.forEach(item=>{
          item.isCheck = false;
        })
        //转到第几个就改变选中的状态
        prize_arr[current_arr[i]].isCheck = true;
        that.setData({
          prizeArr: prize_arr //更新奖品状态
        })
        //如果转到最后一圈且转完了，把抽奖状态初始抽奖完成
        if(index == rotate_num && i == current_arr.length-1){
          that.setData({
            isTurnOver: false
          })
        }
      }, duration * i);
      
    }
  },

  /** 返回直播间 */
  backRoomTap(){
    wx.navigateBack();
  },

  /**
   * 中奖名单，我的奖品 
   */
  accountTap(e){
    let type = e.currentTarget.dataset.type;
    http.href("/pages/luckDraw/luckyPerson/index?type="+type);

  },

  /** 关闭弹窗 */
  closeMaskTap(){
    this.setData({
      showArea: false,
      showRule: false
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})